关于bash:awk和最后一行之后的换行符

您所在的位置:网站首页 awk 删除换行符 关于bash:awk和最后一行之后的换行符

关于bash:awk和最后一行之后的换行符

2023-02-23 12:47| 来源: 网络整理| 查看: 265

我有一个输入文件,其示例是:

1238101010447 25.09 40n50.76  15e06.74   4.96  999  -----  0.2388 314  6.90 99.00  60   6 81EV00001 8101010929 23.85 42n47.96  12e47.90   8.90  3.0  MCSTI  0.0917 123  0.60  2.80  47  16 81EV00002 8101011100 14.41 40n52.23  15e20.57   7.34  999  -----  0.7021 123  0.40  1.30  67  11 81EV00003

我需要获取最后一列和第四列。 我正在使用awk正确获取列,但最后一列的末尾有换行符,因此这些列在单独的行上输出。

我的代码如下:

1awk -F' ' '{print $14, $4}' catalog.txt >> bbb.txt

关于如何执行此操作的任何想法?

最终输出应如下所示:

12381EV00001 15e06.74 81EV00002 12e47.99 81EV00003 15e20.57 相关讨论 可能awk {print $NF, $4} file就足够了,因为-F 是默认值,而$NF与最后一个字段匹配。 但是,尚不清楚输出的外观。 请编辑以澄清。 第一行应该是81EV00001 15e06.74 请提供您获得的输出,最好使用cat -vET。 您现有的输出中是否包含伪造的换行符或伪造的回车符? (后者似乎更有可能)。 如果是CR ...好吧,您能将它们全部剥离吗? 您是否希望输出像输入一样具有CRLF,或者是unix样式的仅LF起作用? 我不明白这个问题。 文件的最后一列通常在其后有一个换行符(除非您在每行以空格结尾)。 但是awk不在$14值中包括换行符。 我的评论不可见吗? :) @KarolyHorvath不知道你在问什么 @Barmar似乎也正在换行

您可以在打印之前删除CR字符:

12awk '{ sub("\ ","", $14); print $14, $4; }' catalog.txt >> bbb.txt

sub()函数将一个字符串替换为另一字符串; 在这种情况下,我将第14列中的\ 字符替换为空字符串。

相关讨论 我已经添加了一个解释,尽管看起来很明显,但前提是您知道sub()函数的作用。

我在一行\ r \ n位于末尾的DOS文件中遇到此问题。 因此,最后一列带有\ r,因为awk / gawk中的默认RS为\ n。

解决方案很简单。 使RS \ r \ n即

123RS="\ \ ";

您可以尝试以下方法,以获取字段(awk)并删除不需要的符号(tr):

删除CR:

12awk -F' ' '{print $14, $4}' catalog.txt | tr -d '\ ' > bbb.txt

删除LF:

12awk -F' ' '{print $14, $4}' catalog.txt | tr -d '\ ' > bbb.txt

去除CR和LF:

123awk -F' ' '{print $14, $4}' catalog.txt | tr -d"\ \ "> bbb.txt

相关讨论 为什么使用临时文件而不是通过tr用管道传输输出? 确实,管道是一种更直接的方法。 编辑。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3